home *** CD-ROM | disk | FTP | other *** search
/ PC Media 22 / PC MEDIA CD22.iso / share / prog / datalib2 / util.cpp < prev   
C/C++ Source or Header  |  1995-08-14  |  5KB  |  219 lines

  1. #include "datapriv.hpp"
  2.  
  3. /***********************************************************************
  4.  
  5.  Utility functions for data base programs
  6.  
  7. ************************************************************************/
  8.  
  9. int eroff=0;
  10.  
  11. // If we're doing the DLL then link that in here
  12.  
  13. #ifdef __DLL__
  14.  
  15. int FAR PASCAL LibMain(HANDLE hinst,WORD wds,WORD whs,LPSTR cmd);
  16. void FAR PASCAL WEP(int np);
  17.  
  18. int FAR PASCAL LibMain(HANDLE hinst,WORD wds,WORD whs,LPSTR cmd)
  19. {
  20.  if (whs>0) UnlockData(0);
  21.  return(1);
  22. }
  23.  
  24. void FAR PASCAL WEP(int np)
  25. {
  26. }
  27.  
  28. #endif
  29.  
  30. // Print a fatal error
  31.  
  32. void dbfer(int ern)
  33. {
  34.  int ers=eroff; eroff=-1; dber(ern); eroff=ers;
  35. }
  36.  
  37. // Print an error
  38.  
  39. void dber(int ern)
  40. {
  41.  char ws[200];
  42.  
  43.  if (eroff>0) return;
  44.  
  45.  if (eroff) sprintf(ws,"\nDatabase Library Fatal Error : \n");
  46.  else sprintf(ws,"\nDatabase Library Error : \n");
  47.  
  48.  switch(ern)
  49.  {
  50.   case DELREC    : strcat(ws,"Database deleted with attached records"); break;
  51.   case FLDOOR    : strcat(ws,"Field number out of range"); break;
  52.   case INVDB    :
  53.   case DBINV    : strcat(ws,"Cannot do operation on invalid database"); break;
  54.   case NODELKEY : strcat(ws,"Cannot find key to delete in index"); break;
  55.   case NORECSP  : strcat(ws,"Cannot make space for record"); break;
  56.   case NODBSP   : strcat(ws,"Cannot make space for database"); break;
  57.   case ERINDW    : strcat(ws,"Cannot write index in record write"); break;
  58.   case INVFILE    : strcat(ws,"Invalid file pointer on read or write"); break;
  59.   case ERONW    : strcat(ws,"Error on write to file - Disk Full ?"); break;
  60.   case INVSEEK  : strcat(ws,"Seek failed on file"); break;
  61.   case NOMEMSP    : strcat(ws,"No Memory for operation"); break;
  62.   case ERONR    : strcat(ws,"Error on read, premature EOF"); break;
  63.   case INVMEMO  : strcat(ws,"Invalid Memo File"); break;
  64.   default    : strcat(ws,"Unknown error"); break;
  65.  }
  66. #ifdef _Windows
  67.  MessageBox(0,ws,"Database Error",MB_OK|MB_ICONASTERISK);
  68. #else
  69.  printf("%s",ws);
  70. #endif
  71. }
  72.  
  73. // write function which checks file as it writes it
  74.  
  75. int Fwrite(void *ptr,int size,int n,FILE *stream)
  76. {
  77.  if (!stream) dber(INVFILE);
  78.  
  79.  int ret=fwrite(ptr,size,n,stream);
  80.  
  81.  if (ret!=n) dber(ERONW);
  82.  return ret;
  83. }
  84.  
  85. // read function which checks file as it reads
  86.  
  87. int Fread(void *ptr,int size,int n,FILE *stream)
  88. {
  89.  if (!stream) dber(INVFILE);
  90.  
  91.  return fread(ptr,size,n,stream);
  92. }
  93.  
  94. // put character function
  95.  
  96. int Fputc(int c,FILE *stream)
  97. {
  98.  if (!stream) dber(INVFILE);
  99.  
  100.  int ret=fputc(c,stream);
  101.  
  102.  if (ret==EOF) dber(ERONW);
  103.  return ret;
  104. }
  105.  
  106. // Get character function
  107.  
  108. int Fgetc(FILE *stream)
  109. {
  110.  if (!stream) dber(INVFILE);
  111.  
  112.  return(fgetc(stream));
  113. }
  114.  
  115. // Fseek function
  116.  
  117. int Fseek(FILE *stream,long off,int wh)
  118. {
  119.  if (!stream) dber(INVFILE);
  120.  
  121.  int ret=fseek(stream,off,wh);
  122.  if (ret) dber(INVSEEK);
  123.  return ret;
  124. }
  125.  
  126. // Trim trailing spaces from the supplied string
  127.  
  128. char* FD trim(char *s) {return rtrim(s);}
  129.  
  130. char* FD rtrim(char *str)
  131. {
  132.  char *sp=str;
  133.  
  134.  while(*sp++); sp--; sp--; while(*sp==' ') sp--; sp++; *sp=0;
  135.  
  136.  return str;
  137. }
  138.  
  139. // Trim leading spaces from the supplied string
  140.  
  141. char* FD ltrim(char *str)
  142. {
  143.  char *sp=str;
  144.  
  145.  while(*sp++==' '); sp--; if (sp!=str) strcpy(str,sp);
  146.  
  147.  return str;
  148. }
  149.  
  150. // Get a date in dbf form from an ANSI time
  151.  
  152. char* FD getdate(time_t time)
  153. {
  154.  static char _rdate[9];
  155.  struct tm *tms;
  156.  
  157.  tms=localtime(&time);
  158.  sprintf(_rdate,"%04d%02d%02d",
  159.      tms->tm_year+1900,tms->tm_mon+1,tms->tm_mday);
  160.  return _rdate;
  161. }
  162.  
  163. // Get a time in ANSI form (seconds since 1970)
  164.  
  165. time_t FD gettime(char *date)
  166. {
  167.  int m,d,y;
  168.  struct tm tms;
  169.  
  170.  tms.tm_sec=tms.tm_min=tms.tm_hour=tms.tm_isdst=0;
  171.  gnums(date,d,m,y);
  172.  tms.tm_mday=d; tms.tm_mon=m-1; tms.tm_year=y-1900;
  173.  return(mktime(&tms));
  174. }
  175.  
  176. // Get date into number of days, months and years
  177.  
  178. void FD gnums(char *date,int &d,int &m,int &y)
  179. {
  180.  char lt[9];
  181.  
  182.  strncpy(lt,date,9);
  183.  
  184.  d=atoi(lt+6); lt[6]=0;
  185.  m=atoi(lt+4); lt[4]=0;
  186.  y=atoi(lt);
  187. }
  188.  
  189.  
  190. // Swap data put characters after the c character in the front
  191. // of the string, follow by a space and the rest of the string.
  192. // e.g. swapdate("LYNCH~JON",'~') results in "JON LYNCH"
  193.  
  194. char* FD swapdata(char *s,int c)
  195. {
  196.  char ws[256],*wsp;
  197.  
  198.  if (strlen(s)>254) return s;
  199.  
  200.  wsp=strchr(s,c); if (!wsp) return s;
  201.  
  202.  strcpy(ws,wsp+1); *wsp=0; strcat(ws," "); strcat(ws,s);
  203.  return(strcpy(s,ws));
  204. }
  205.  
  206. // Compare a string in dBase format, e.g. "Barclay" & "B" is true
  207.  
  208. int FD strcmpdb(char *s1,char *s2,int l1)
  209. {
  210.  if (l1==-1) l1=strlen(s1);
  211.  int l2=strlen(s2);
  212.  if (l1<l2)        // Length 1 < Length 2 so cannot be equal
  213.  {
  214.   int rv=strnicmp(s1,s2,l1);
  215.   return (rv<=0) ? -1 : 1;
  216.  }
  217.  return(strnicmp(s1,s2,l2));
  218. }
  219.